package com.example.chat.utils;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.compress.utils.Lists;
import org.apache.poi.ss.usermodel.Cell;

import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ExcelUtils {

    /**
     * 批量导入时 判断单元格类型1
     */
    public static String getCell(Cell cell) {
        if (cell == null || cell.toString().trim().equals("")) {
            return "";
        } else {
            DecimalFormat df = new DecimalFormat("#");
            switch (cell.getCellTypeEnum()) {
                // 数字
                case NUMERIC:
                    return Double.valueOf(cell.getNumericCellValue()).intValue() + "";
                // 字符串
                case STRING:
                    return cell.getStringCellValue();
                // 函数
                case FORMULA:
                    return cell.getCellFormula();
                // 空值
                case BLANK:
                    return "";
                // 布尔类型
                case BOOLEAN:
                    return cell.getBooleanCellValue() + "";
                // 异常
                case ERROR:
                    return cell.getErrorCellValue() + "";
                default:
                    return "";
            }
        }
    }
//	/**
//     * 批量导入时 判断单元格类型2
//     */
//	public static String getCell2(XSSFCell cell) {
//        String cellValue = "";
//        // 以下是判断数据的类型
//        switch (cell.getCellTypeEnum()) {
//			// 数字
//            case NUMERIC:
//                if (org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell)) {
//                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//                    cellValue = sdf.format(org.apache.poi.ss.usermodel.DateUtil.getJavaDate(cell.getNumericCellValue())).toString();
//                } else {
//                    DataFormatter dataFormatter = new DataFormatter();
//                    cellValue = dataFormatter.formatCellValue(cell);
//                }
//                break;
//			// 字符串
//            case STRING:
//                cellValue = cell.getStringCellValue();
//                break;
//			// Boolean
//            case BOOLEAN:
//                cellValue = cell.getBooleanCellValue() + "";
//                break;
//			// 公式
//            case FORMULA:
//                cellValue = cell.getCellFormula() + "";
//                break;
//			// 空值
//            case BLANK:
//                cellValue = "";
//                break;
//			// 故障
//            case ERROR:
//                cellValue = "非法字符";
//                break;
//            default:
//                cellValue = "未知类型";
//                break;
//        }
//        return cellValue;
//    }

    /**
     * @return java.util.List<java.lang.Object [ ]>
     * @Author pq
     * @Description 将对象列表转换为对象属性值数组列表
     * @Date 22:01 2022/11/5
     * @Param [objectList]
     **/
    public static String[][] makeExportDataArrArr(List<?> objectList) {
        List<Object[]> objectPropertyValueArrList = Lists.newArrayList();
        String[][] objectPropertyValueArrArr = null;
        if (CollectionUtils.isNotEmpty(objectList)) {
            String[] columnNameArr = ExcelUtils.getColumnNameArr(objectList.get(0).getClass());
            objectPropertyValueArrArr = new String[objectList.size()][columnNameArr.length];
            for (int i = 0; i < objectList.size(); i++) {
                String[] objectPropertyValueArr = new String[columnNameArr.length];
                for (int j = 0; j < columnNameArr.length; j++) {
                    try {
                        Object obj=objectList.get(i);
                        Field field=obj.getClass().getDeclaredField(columnNameArr[j]);
                        field.setAccessible(true);
                        objectPropertyValueArr[j] = field.get(obj).toString();
                    } catch (NoSuchFieldException e) {
                        throw new RuntimeException(e);
                    } catch (IllegalAccessException e) {
                        throw new RuntimeException(e);
                    }
                }
                objectPropertyValueArrArr[i] = objectPropertyValueArr;
            }
        }
        return objectPropertyValueArrArr;
    }

    /**
     * @return java.lang.String[]
     * @Author pq
     * @Description 获取对象字段名数组
     * @Date 20:58 2022/11/5
     * @Param []
     **/
    public static String[] getColumnNameArr(Class<?> clazz) {
        Field[] declaredFields;
        String[] columnNameArr;
        try {
            declaredFields = clazz.getDeclaredFields();
            columnNameArr = new String[declaredFields.length];
            for (int i = 0; i < declaredFields.length; i++) {
                columnNameArr[i] = declaredFields[i].getName();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return columnNameArr;
    }
}